package versionAscensor;

import info.clearthought.layout.TableLayout;

import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.FontFormatException;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import javax.swing.WindowConstants;
import javax.swing.border.BevelBorder;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;

/**
 * This code was edited or generated using CloudGarden's Jigloo SWT/Swing GUI
 * Builder, which is free for non-commercial use. If Jigloo is being used
 * commercially (ie, by a corporation, company or business for any purpose
 * whatever) then you should purchase a license for each developer using Jigloo.
 * Please visit www.cloudgarden.com for details. Use of Jigloo implies
 * acceptance of these licensing terms. A COMMERCIAL LICENSE HAS NOT BEEN
 * PURCHASED FOR THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED LEGALLY FOR
 * ANY CORPORATE OR COMMERCIAL PURPOSE.
 */
@SuppressWarnings("serial")
public class NuevaVentana extends javax.swing.JFrame
{

	{
		// Set Look & Feel
		try
		{
			javax.swing.UIManager
					.setLookAndFeel("com.jgoodies.looks.plastic.Plastic3DLookAndFeel");
			// javax.swing.UIManager.
		} catch (Exception e)
		{
			e.printStackTrace();
		}
	}

	//System.setProperty("sun.java2d.d3d","true");
	
	public static boolean VentanaCerrada = false;
	boolean repintar = false;

	// private EmbeddedMediaPlayerComponent mediaPlayerComponent;

	private BotonTranslucido BotonOK;
	private BotonTranslucido BotonBorrar;
	private BotonTranslucido Boton0;
	private JLabel jLabel2;
	private BotonTranslucido BotonCerrar;
	private BotonTranslucido BotonAbrir;

	private BotonTranslucido Boton9;
	private BotonTranslucido Boton8;
	private BotonTranslucido Boton7;
	private BotonTranslucido Boton6;
	private BotonTranslucido Boton5;
	private BotonTranslucido Boton4;
	private BotonTranslucido Boton3;
	private BotonTranslucido Boton2;
	private BotonTranslucido Boton1;

	private BotonTranslucido Parada7;
	private BotonTranslucido Parada6;
	private BotonTranslucido Parada5;
	private BotonTranslucido Parada4;
	private BotonTranslucido Parada3;
	private BotonTranslucido Parada2;
	private BotonTranslucido Parada1;
	/*
	 * private JButton BotonOK; private JButton BotonBorrar; private JButton
	 * Boton0; private JLabel jLabel2; private JLabel jLabel1; private JTextPane
	 * DatosMostrar; private JTextPane MuestraHora; private JButton BotonCerrar;
	 * private JButton BotonAbrir; private JTextPane Texto2; private JTextPane
	 * Texto1; private JButton Boton9; private JButton Boton8; private JButton
	 * Boton7; private JButton Boton6; private JButton Boton5; private JButton
	 * Boton4; private JButton Boton3; private JButton Boton2; private JButton
	 * Boton1;//
	 */

	// public Image img;

	// instancias de subclases.
	ClaseDeControl Controlador = new ClaseDeControl();
	Timer ActualizarTexto = null;
	private JTextPane jTFlecha;
	private JTable jTable1;
	private JLabel jLabel1;
	private JTextField jTextoPiso;

	private JTextFieldLimit JTextoLimitado = new JTextFieldLimit(2);
	
	private JTextPane PPiso;

	PanelDeFondo background;// = new PanelDeFondo(img,PanelDeFondo.SCALED, 0.0f,
							// 0.0f);//*/

	TableModel jTable1Model = new DefaultTableModel(

	new String[][] {
	/*
	 * { "1", "2" }, { "10", "20" }, { "3", "40" },{ "50", "6" } //
	 */
	}, new String[] { "", "" }// */"Column 1", "Column 2"
	);

	/*
	 * private JButton Parada10; private JButton Parada9; private JButton
	 * Parada8; private JButton Parada7; private JButton Parada6; private
	 * JButton Parada5; private JButton Parada4; private JButton Parada3;
	 * private JButton Parada2; private JButton Parada1;//
	 */

	int filasviejas = 0;
	int columnasviejas = 0;

	// static NuevaVentana inst = new NuevaVentana();
	/**
	 * Auto-generated main method to display this JFrame
	 */
	public static void main(String[] args)
	{
		SwingUtilities.invokeLater(new Runnable()
		{
			public void run()
			{
				NuevaVentana inst = new NuevaVentana();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
		// System.out.println("Constructor 3");
	}

	public NuevaVentana()
	{
		super();
		initGUI(); // inicializa la Interfaz grafica
		Controlador.Inicializacion(); // inicializo la clase de control y
										// detecta los puertos
		//TODO Verificar
		Controlador.Temporizador();
		Controlador.TemporizadorRespuesta(150);
		
		Controlador.TemporizadorDesconeccion(); //inicializo timer de Desconeeccion.
		
		//solo para prueba.
	//	Controlador.IniciarTimerDesconeccion();
		
		Controlador.IniciarTimer();
		TemporizadorActualizarTexto();
		ActualizarTexto.start();
	}

	@SuppressWarnings({ "static-access", "deprecation" })
	private void initGUI()
	{
		try
		{
			{
				this.setDefaultLookAndFeelDecorated(true);
			}

			// Coloco una imgen de fondo al jFrame..
			// Para eso hay que sobreescribir el metodo por defecto de el jPanel

			File file = new File("Yoo+Arts_hdef.jpg");
			// File file = new File("Yoo+Arts.jpg");

			BufferedImage img = ImageIO.read(file);

	//		img = ImagenCompatible(img);
			//Hago la imagen compatible con el sistema
			
			background = new PanelDeFondo(img, PanelDeFondo.SCALED, 0.0f, 0.0f);// */

			setContentPane(background);
			// */

			TableLayout thisLayout = new TableLayout(new double[][] {
					{ TableLayout.FILL, TableLayout.FILL, TableLayout.FILL,
							130.0, 130.0, 130.0 },
					{ 46.0, 42.0, TableLayout.FILL, TableLayout.FILL,
							TableLayout.FILL, TableLayout.FILL,
							TableLayout.FILL, TableLayout.FILL,
							TableLayout.FILL, TableLayout.FILL,
							TableLayout.FILL, TableLayout.FILL, 130.0, 130.0,
							130.0, 130.0 } });
			thisLayout.setHGap(5);
			thisLayout.setVGap(5);
			getContentPane().setLayout(thisLayout);

			background.setDoubleBuffered(true);
			//background.setDoubleBuffered(false);
			
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

			
			this.setAlwaysOnTop(true);
			this.setName("Recuadro");

			
			//Hace invisible el mouse
			// Transparent 16 x 16 pixel cursor image.
			BufferedImage cursorImg = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB);
			// Create a new blank cursor.
			Cursor blankCursor = Toolkit.getDefaultToolkit().createCustomCursor(
			    cursorImg, new Point(0, 0), "blank cursor");
			//mainJFrame.getContentPane().setCursor(blankCursor);
			
			background.setCursor(blankCursor);
			//*/
			//Fin de hacer invisible el mouse

			// this.setFont(new java.awt.Font("Aakar",1,40));
			{
				// Boton1 = new JButton();
				Boton1 = new BotonTranslucido("1");
				background.add(Boton1, "0, 12");
				Boton1.setText("1");
				Boton1.addMouseListener(new MouseAdapter()
				{
					// public void mouseClicked(MouseEvent evt)
					public void mousePressed(MouseEvent evt)
					{
						// System.out.println("Boton1.mouseClicked, event="+evt);
						// Texto1.setText(Texto1.getText() + "1");
						jTextoPiso.setText(jTextoPiso.getText() + "1");
						// jTextoPiso.setText("1");
						repintar = true;
					}
				});
			}
			{
				// Boton2 = new JButton();
				Boton2 = new BotonTranslucido("2");
				background.add(Boton2, "1, 12");
				Boton2.setText("2");
				Boton2.addMouseListener(new MouseAdapter()
				{
					public void mousePressed(MouseEvent evt)
					{
						// System.out.println("Boton2.mouseClicked, event="+evt);
						// Texto1.setText(Texto1.getText() + "2");
						jTextoPiso.setText(jTextoPiso.getText() + "2");
						repintar = true;
					}
				});
			}
			{
				// Boton3 = new JButton();
				Boton3 = new BotonTranslucido("3");
				background.add(Boton3, "2, 12");
				Boton3.setText("3");
				Boton3.setFont(new java.awt.Font("DejaVu Sans", 0, 12));
				Boton3.addMouseListener(new MouseAdapter()
				{
					public void mousePressed(MouseEvent evt)
					{
						// System.out.println("Boton3.mouseClicked, event="+evt);

						// Texto1.setText(Texto1.getText() + "3");
						jTextoPiso.setText(jTextoPiso.getText() + "3");
						repintar = true;
					}
				});
			}
			{
				// Boton4 = new JButton();
				Boton4 = new BotonTranslucido("4");
				background.add(Boton4, "0, 13");
				Boton4.setText("4");
				Boton4.addMouseListener(new MouseAdapter()
				{
					public void mousePressed(MouseEvent evt)
					{
						jTextoPiso.setText(jTextoPiso.getText() + "4");
						repintar = true;
					}
				});
			}
			{
				// Boton5 = new JButton();
				Boton5 = new BotonTranslucido("5");
				background.add(Boton5, "1, 13");
				Boton5.setText("5");
				Boton5.addMouseListener(new MouseAdapter()
				{
					public void mousePressed(MouseEvent evt)
					{
						// System.out.println("Boton5.mouseClicked, event="+evt);
						// Texto1.setText(Texto1.getText() + "5");
						jTextoPiso.setText(jTextoPiso.getText() + "5");
						repintar = true;
					}
				});
			}
			{
				// Boton6 = new JButton();
				Boton6 = new BotonTranslucido("6");
				background.add(Boton6, "2, 13");
				Boton6.setText("6");
				Boton6.addMouseListener(new MouseAdapter()
				{
					public void mousePressed(MouseEvent evt)
					{
						// System.out.println("Boton6.mouseClicked, event="+evt);
						// Texto1.setText(Texto1.getText() + "6");
						jTextoPiso.setText(jTextoPiso.getText() + "6");
						repintar = true;
					}
				});
			}
			{
				// Boton7 = new JButton();
				Boton7 = new BotonTranslucido("7");
				background.add(Boton7, "0, 14");
				Boton7.setText("7");
				Boton7.addMouseListener(new MouseAdapter()
				{
					public void mousePressed(MouseEvent evt)
					{
						// System.out.println("Boton7.mouseClicked, event="+evt);
						// Texto1.setText(Texto1.getText() + "7");
						jTextoPiso.setText(jTextoPiso.getText() + "7");
						repintar = true;
					}
				});
			}
			{
				// Boton8 = new JButton();
				Boton8 = new BotonTranslucido("8");
				background.add(Boton8, "1, 14");
				Boton8.setText("8");

				Boton8.addMouseListener(new MouseAdapter()
				{
					public void mousePressed(MouseEvent evt)
					{
						// System.out.println("Boton8.mouseClicked, event="+evt);

						// Texto1.setText(Texto1.getText() + "8");
						jTextoPiso.setText(jTextoPiso.getText() + "8");
						repintar = true;
					}
				});
			}
			{
				// Boton9 = new JButton();
				Boton9 = new BotonTranslucido("9");
				background.add(Boton9, "2, 14");
				Boton9.setText("9");
				Boton9.addMouseListener(new MouseAdapter()
				{
					public void mousePressed(MouseEvent evt)
					{
						// System.out.println("Boton9.mouseClicked, event="+evt);
						// Texto1.setText(Texto1.getText() + "9");
						jTextoPiso.setText(jTextoPiso.getText() + "9");
						repintar = true;
					}
				});
			}
			{
				// Boton0 = new JButton();
				Boton0 = new BotonTranslucido("0");
				background.add(Boton0, "1, 15");
				Boton0.setText("0");
				Boton0.addMouseListener(new MouseAdapter()
				{
					public void mousePressed(MouseEvent evt)
					{
						// System.out.println("Boton0.mouseClicked, event="+evt);
						// Texto1.setText(Texto1.getText() + "0");
						jTextoPiso.setText(jTextoPiso.getText() + "0");
						repintar = true;
					}
				});
			}
			{
				// BotonBorrar = new JButton();
				BotonBorrar = new BotonTranslucido("Borrar");
				background.add(BotonBorrar, "3, 14, 4, 14");
				BotonBorrar.setText("Borrar");
				BotonBorrar.addMouseListener(new MouseAdapter()
				{
					public void mousePressed(MouseEvent evt)
					{
						// System.out.println("BotonBorrar.mouseClicked, event="+evt);
						// Texto1.setText("");
						// Texto1.repaint();
						jTextoPiso.setText("");
						jTextoPiso.repaint();
						repintar = true;
						// background.repaint();
						// try
						// {
						// Thread.sleep(100);
						// } catch (InterruptedException e)
						// {
						// // TODO Auto-generated catch block
						// e.printStackTrace();
						// }
						// background.repaint();
					}
				});
			}
			{
				// BotonOK = new JButton();
				BotonOK = new BotonTranslucido("Entrar");

				background.add(BotonOK, "3, 15, 4, 15");
				BotonOK.setText("Entrar");
				BotonOK.setRequestFocusEnabled(true);
				BotonOK.addMouseListener(new MouseAdapter()
				{
					public void mousePressed(MouseEvent evt)
					{
						// System.out.println("BotonOK.mouseClicked, event=" +
						// evt);
						// Controlador.DetenerTimer(); // detengo el timer
						// implemento

						// String valortypeado = Texto1.getText(); // Leo
						String valortypeado = jTextoPiso.getText(); // Leo
						// el
						// piso
						// elegido
						if (!valortypeado.isEmpty())
						{
							Controlador.DetenerTimer(); // detengo el timer
							//para poder hacer la salida del piso que queremos
							
							int PisoSolicitado = 0;
						
							
							PisoSolicitado = Integer.valueOf(valortypeado);

							// System.out.println(PisoSolicitado);
							if (PisoSolicitado > Controlador.CantidadTotalPisos
									|| PisoSolicitado == 0 || Controlador.VectorSalidas[PisoSolicitado] == 0) // Valido
							// si no
							// es
							// una
							// seleccion
							// de
							// piso
							// valida
							{
								// clareo las variables usadas y pongo en
								// blanco el texto
								// System.out.println("piso mayor al determinado");
								valortypeado = "";
								// Texto1.setText(valortypeado);
								jTextoPiso.setText(valortypeado);
								
								Controlador.IniciarTimer();
								//Inicio el timer para la lectura de los puertos.
								
								//TODO
								//Deshabilito el timer de lectura de puerto,
								//para que solo se habilite hasta despues de haber recibido la contestacion.
							}
							// colocar codigo de salida al piso deseado
							else
							// si es un piso valido
							{
							/**
							 * Aca tengo que colocar que envie el valor del piso
							 * correspondiente a la tabla de salida, caragada del
							 * archivo correspondiente.	
							 */
								if (Controlador.VectorSalidas[PisoSolicitado] != 0)
								{
								 Controlador.EnviarDato(Controlador.VectorSalidas[PisoSolicitado]);
								}
								// Controlador.EnviarDato(PisoSolicitado);
								valortypeado = "";
								// Texto1.setText(valortypeado);
								jTextoPiso.setText(valortypeado);
								// IniciarTimer();
							}

						}
						repintar = true;

					}
				});
			}
			{
				// BotonAbrir = new JButton();
				BotonAbrir = new BotonTranslucido("<|>");
				background.add(BotonAbrir, "0, 15");
				BotonAbrir.setText("<|>");
				BotonAbrir.addMouseListener(new MouseAdapter() 
				{
					public void mousePressed(MouseEvent evt) 
					{
						EnviarDatoBotonPreseleccion(Controlador.SalidaBotonAbrirPuerta);
						//System.out.println("Abrir puerta"+Controlador.SalidaBotonAbrirPuerta);
						//TODO add your code for BotonAbrir.mousePressed
					}
				});
			}
			{
				// BotonCerrar = new JButton();
				BotonCerrar = new BotonTranslucido(">|<");
				background.add(BotonCerrar, "2, 15");
				BotonCerrar.setText(">|<");
				BotonCerrar.addMouseListener(new MouseAdapter() 
				{
					public void mousePressed(MouseEvent evt) 
					{
						EnviarDatoBotonPreseleccion(Controlador.SalidaBotonCerrarPuerta);
						//System.out.println("Cerrar puerta"+Controlador.SalidaBotonCerrarPuerta);
						//TODO add your code for BotonCerrar.mousePressed
					}
				});
			}
			{
				jLabel2 = new JLabel();
				background.add(jLabel2, "0, 12");
			}
			{
				Parada1 = new BotonTranslucido("");
				Parada1.setText(Controlador.LabelBotonpisodirecto1);
				background.add(Parada1, "0, 4, 2, 4");
				Parada1.setRequestFocusEnabled(false);
				

				if (Controlador.SalidaBotonpisodirecto1 == 0)
				{
				Parada1.enable(false);
				Parada1.setVisible(false);
				}
				else
				{
				Parada1.addMouseListener(new MouseAdapter()
				{
						public void mousePressed(MouseEvent evt)
						{
							EnviarDatoBotonPreseleccion(Controlador.SalidaBotonpisodirecto1);
						}
					});
				}

			}
			{
				Parada2 = new BotonTranslucido("");
				Parada2.setText(Controlador.LabelBotonpisodirecto2);
				background.add(Parada2, "0, 5, 2, 5");

				if (Controlador.SalidaBotonpisodirecto2 == 0)
				{
				Parada2.enable(false);
				Parada2.setVisible(false);
				}
				else
				{
				Parada2.addMouseListener(new MouseAdapter()
				{
						public void mousePressed(MouseEvent evt)
						{
							EnviarDatoBotonPreseleccion(Controlador.SalidaBotonpisodirecto2);
						}
					});
				}
				
				/*
				Parada2.addMouseListener(new MouseAdapter()
				{
					public void mousePressed(MouseEvent evt)
					{
						// System.out.println("Parada1.mousePressed, event="+evt);
						// TODO add your code for Parada1.mousePressed
						Controlador
								.EnviarDato(Controlador.SalidaBotonpisodirecto2);
						repintar = true;
					}
				});//*/
			}
			{
				// Parada3 = new JButton();
				// Parada3 = new BotonTranslucido("PISCINA");
				Parada3 = new BotonTranslucido("");
				Parada3.setText(Controlador.LabelBotonpisodirecto3);
				background.add(Parada3, "0, 6, 2, 6");
				// Parada3.setText("P3");
				
				if (Controlador.SalidaBotonpisodirecto3 == 0)
				{
				Parada3.enable(false);
				Parada3.setVisible(false);
				}
				else
				{
				Parada3.addMouseListener(new MouseAdapter()
				{
						public void mousePressed(MouseEvent evt)
						{
							EnviarDatoBotonPreseleccion(Controlador.SalidaBotonpisodirecto3);
						}
					});
				}

			}
			{
				Parada4 = new BotonTranslucido("");
				Parada4.setText(Controlador.LabelBotonpisodirecto4);
				background.add(Parada4, "0, 7, 2, 7");
				if (Controlador.SalidaBotonpisodirecto4 == 0)
				{
				Parada4.enable(false);
				Parada4.setVisible(false);
				}
				else
				{
				Parada4.addMouseListener(new MouseAdapter()
				{
						public void mousePressed(MouseEvent evt)
						{
							EnviarDatoBotonPreseleccion(Controlador.SalidaBotonpisodirecto4);
						}
					});
				}
			}
			{
				Parada5 = new BotonTranslucido("");
				Parada5.setText(Controlador.LabelBotonpisodirecto5);
				background.add(Parada5, "0, 8, 2, 8");
				// Parada5.setText("P5");
				if (Controlador.SalidaBotonpisodirecto5 == 0)
				{
				Parada5.enable(false);
				Parada5.setVisible(false);
				}
				else
				{
				Parada5.addMouseListener(new MouseAdapter()
				{
						public void mousePressed(MouseEvent evt)
						{
							EnviarDatoBotonPreseleccion(Controlador.SalidaBotonpisodirecto5);
						}
					});
				}
			}
			{
				Parada6 = new BotonTranslucido("");
				Parada6.setText(Controlador.LabelBotonpisodirecto6);
				background.add(Parada6, "0, 9, 2, 9");
				if (Controlador.SalidaBotonpisodirecto6 == 0)
				{
				Parada6.enable(false);
				Parada6.setVisible(false);
				}
				else
				{
				Parada6.addMouseListener(new MouseAdapter()
				{
						public void mousePressed(MouseEvent evt)
						{
							EnviarDatoBotonPreseleccion(Controlador.SalidaBotonpisodirecto6);
						}
					});
				}
			}
			{
				Parada7 = new BotonTranslucido("");
				Parada7.setText(Controlador.LabelBotonpisodirecto7);
				background.add(Parada7, "0, 10, 2, 10");
				if (Controlador.SalidaBotonpisodirecto7 == 0)
				{
				Parada7.enable(false);
				Parada7.setVisible(false);
				}	//	EscribirLog.ModificarFechaAccesoArchivo();
				else
				{
				Parada7.addMouseListener(new MouseAdapter()
				{
						public void mousePressed(MouseEvent evt)
						{
							EnviarDatoBotonPreseleccion(Controlador.SalidaBotonpisodirecto7);
						}
					});
				}
			}
			{
				//Muestra el piso actual
				PPiso = new JTextPane();
				background.add(PPiso, "4, 2, 5, 5");
				PPiso.setText("00");
				PPiso.setFont(new java.awt.Font("Aakar", 0, 400));
				PPiso.setEditable(false);
				PPiso.setFocusable(false);
			}
			{
				jTextoPiso = new JTextField();
				
				jTextoPiso.setDocument(JTextoLimitado);
				
				background.add(jTextoPiso, "3, 12");
				jTextoPiso.setEditable(false);
				jTextoPiso.setOpaque(false);

				jTextoPiso.setBackground(new java.awt.Color(255,255,255));
			}
			{
				jLabel1 = new JLabel();
				background.add(jLabel1, "4, 0, 5, 1");

				File ArchivoIconoServas = new File("Logo Servas.png");

				BufferedImage ImagenIconoServas = ImageIO
						.read(ArchivoIconoServas);
				jLabel1.setIcon(new ImageIcon(ImagenIconoServas
						.getScaledInstance(265, 93, Image.SCALE_SMOOTH)));

			}
			{

				jTable1 = new JTable();
				background.add(jTable1, "5, 11, 5, 14");
				jTable1.setModel(jTable1Model);
				jTable1.setRowHeight(40);
				// jTable1.setOpaque(false);
				jTable1.setShowHorizontalLines(false);
				jTable1.setShowVerticalLines(false);
				jTable1.setIntercellSpacing(new java.awt.Dimension(0, 0));
				jTable1.setBorder(BorderFactory
						.createBevelBorder(BevelBorder.LOWERED));
				jTable1.setFocusable(false);

				jTable1.setRowSelectionAllowed(false);
				jTable1.setOpaque(false);

				// ((DefaultTableCellRenderer)jTable1.getDefaultRenderer(Object.class)).setOpaque(false);

				// centro cada item!
				TableColumn col0 = jTable1.getColumnModel().getColumn(0);
				TableColumn col1 = jTable1.getColumnModel().getColumn(1);
				DefaultTableCellRenderer dtcr = new DefaultTableCellRenderer();
				dtcr.setHorizontalAlignment(SwingConstants.CENTER);

				col0.setCellRenderer(dtcr);
				col1.setCellRenderer(dtcr);

				Object[] fila = new Object[16];

				for (int indicadorfila = 0; indicadorfila < 16; ++indicadorfila)
				{
					fila[indicadorfila] = "";
					((DefaultTableModel) jTable1Model).addRow(fila); // Añade
																		// una
																		// fila
																		// al
																		// final
				}

				// ((DefaultTableModel) jTable1Model).addRow ( fila ); // Añade
				// una fila al final
				/*
				 * jTable1Model.setValueAt ("1", 0, 0); // Cambia el valor de la
				 * fila 1, columna 2. jTable1Model.setValueAt ("1", 5, 1);//
				 */
				// ((DefaultTableModel) jTable1Model).removeRow (0);

				// jTable1.setFont(font);
			}
			{
				jTFlecha = new JTextPane();
				background.add(jTFlecha, "3, 2, 3, 4");
				jTFlecha.setPreferredSize(new java.awt.Dimension(226, 191));
				jTFlecha.setEditable(false);
			}

			this.addWindowListener(new WindowAdapter()
			{
				public void windowClosing(WindowEvent evt)
				{
					// Maneja mejor el cerrar la ventana.
					// System.out.println("this.windowClosing, event=" + evt);
					// TODO add your code for this.windowClosing
					Controlador.DetenerTimer();
					Controlador.EscribirLog.EscribirElArchivo("Cerrando Programa");
					Controlador.FinalizarPrograma();
					
				}

				/*
				 * public void windowClosed(WindowEvent evt) {
				 * 
				 * // System.out.println("Ventana Cerrada");
				 * Controlador.DetenerTimer(); Controlador.FinalizarPrograma();
				 * // System.exit(1); // VentanaCerrada = true; //
				 * System.out.println(VentanaCerrada);
				 * 
				 * }//
				 */

			});

			// setExtendedState(MAXIMIZED_BOTH);
			// pack();
			//
			this.setSize(768, 1366);
			//this.setSize(1000, 750);
			this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			this.setUndecorated(true); // Habilita esto para que este en toda la
										// pantalla pero solo funciona en ubuntu
										// 2D
			this.setVisible(true); // /TODO si se maximiza sacar esto... sino
			//this.setSize(989, 1351);
			// dejarlo poque sino no se ve el video

			listAllComponentsIn(this.getContentPane());

			// ESTO FUNCIONA PARA MAXIMIZAR!!! NO BORRAR TODO

			
			  GraphicsEnvironment ge = GraphicsEnvironment
			 .getLocalGraphicsEnvironment(); GraphicsDevice gs =
			 ge.getDefaultScreenDevice(); gs.setFullScreenWindow(this);// //
			
//*/
			// animaciones de flechas.

			/*
			 * String separator = System.getProperty("file.separator"); String
			 * rootPath = System.getProperty("user.dir");
			 * System.out.println(separator); System.out.println(rootPath);//
			 */

			// jLabel1.setIcon(new ImageIcon("arrow-animated.gif"));
			// jLabel2.setIcon(new ImageIcon("animated-arrow-down.gif"));

			// reproducir video..
			/*
			 * MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory();
			 * 
			 * CanvasVideoSurface videoSurface = mediaPlayerFactory
			 * .newVideoSurface(canvas1); EmbeddedMediaPlayer mediaPlayer =
			 * mediaPlayerFactory .newEmbeddedMediaPlayer(); MediaListPlayer
			 * mediaListPlayer = mediaPlayerFactory .newMediaListPlayer();
			 * mediaPlayer.setVideoSurface(videoSurface);
			 * mediaListPlayer.setMediaPlayer(mediaPlayer);
			 * 
			 * MediaList mediaList = mediaPlayerFactory.newMediaList();
			 * mediaList.addMedia("How elevators work.flv");
			 * mediaListPlayer.setMediaList(mediaList);
			 * mediaListPlayer.setMode(MediaListPlayerMode.LOOP);
			 * mediaPlayer.setAspectRatio("16:9");
			 * 
			 * mediaListPlayer.play(); //
			 */

		} catch (Exception e)
		{
			e.printStackTrace();
		}

	}

	// ------------------------------------------------------------------------------------------------------------------------------------

	// -----------------------------------------------------------------------------------------------------------------------------------
	// Cambia el tamaño de la fuente una vez que se maximiza.
	public void listAllComponentsIn(Container parent)
	{

		Font fuente2 = new Font("Dialog", Font.PLAIN, 48);
		Font fuente3 = new Font("Dialog", Font.PLAIN, 38);
		Font fuente5 = new Font("Symbol", Font.PLAIN, 150);
		// aca cargo una fuente que me guste!!
		Font fuente4 = null;
		try
		{
			fuente4 = Font.createFont(Font.TRUETYPE_FONT, new File(
					"LANEPOSH.ttf"));
			// fuente4 = Font.createFont(Font.TRUETYPE_FONT,new
			// File("postoffice.ttf"));
			fuente4 = fuente4.deriveFont(Font.PLAIN, 200);
			// fuente4 = fuente4.deriveFont(Font.BOLD,200);
		} catch (FontFormatException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 //*/
		GraphicsEnvironment ge = GraphicsEnvironment
				.getLocalGraphicsEnvironment();
		ge.registerFont(fuente4);
		jTable1.setFont(fuente3);

		for (Component c : parent.getComponents())
		{
			if (c instanceof JButton)
			{
				c.setFont(fuente2); // si es un boton
				c.setBackground(Color.LIGHT_GRAY);

				((JComponent) c).setOpaque(true);
				// ((AbstractButton) c).setContentAreaFilled(false);
				// ((AbstractButton) c).setBorderPainted(true);

				c.setForeground(Color.black);//

				// c.setForeground(new Color(253,253,253,150));//
				((JButton) c).setRequestFocusEnabled(false);
			}
			
			if (c instanceof JTextPane && !c.equals(PPiso))
			{
				
				c.setFont(fuente3); // si es un texto.
				// ((AbstractButton) c).setContentAreaFilled(false);
				// ((JComponent)
				// c).setBorder(BorderFactory.createEmptyBorder());
				c.setBackground(Color.black);
				//c.setBackground(Color.red); // hace transparente el

				//c.setBackground(new Color(0, 0, 0, 0)); // hace transparente el
														// boton;
				c.setForeground(Color.RED);
			}//*/
			if (c.equals(PPiso))
			{
				PPiso.setFont(fuente4); // si es un texto.
						
         		c.setBackground(new Color(0, 0, 0, 0));
         		
				c.setForeground(Color.yellow);//
         		
         		
			}// 
			
			if (c.equals(jTextoPiso))
			{
				c.setFont(new Font("Dialog", Font.ROMAN_BASELINE, 100)); 
				((JComponent) c).setOpaque(true);
				
				c.setBackground(new Color(0, 0, 0, 0.1f));
				c.setForeground(Color.yellow);
			}//
			if (c.equals(jTable1))
			{
				c.setBackground(new Color(0, 0, 0, 0.1f));
				c.setForeground(Color.red);
			}//*/
			if (c.equals(jTFlecha))
			{
				jTFlecha.setFont(fuente5); // si es un texto.
						
         		c.setBackground(new Color(0, 0, 0, 0));
         		//c.setForeground(new Color(250,250,200));//
         		c.setForeground(Color.yellow);//
         		
			}// 
			

		}
	}

	// -----------------------------------------------------------------------------------------------------------------------------
	public void TemporizadorActualizarTexto()
	{

		ActionListener AccionActualiza = new ActionListener()
		{

			/*
			 * Accion a realizar una vez que se activo el timer de contestacion
			 */
			int Primeravez = 0;
			int ContadorGrabarArchivo = 0;

			public void actionPerformed(ActionEvent e)
			{
				/**
				 * Pueba de modificar la ultima fecha de acceso a archivo.
				 */
				++ContadorGrabarArchivo;
				//System.out.println(ContadorGrabarArchivo);
				if (ContadorGrabarArchivo == 100) //cada 10 seg.
				{
				
				Controlador.EscribirLog.ModificarFechaAccesoArchivo();
				ContadorGrabarArchivo = 0;
				}
				/*
				 * java.util.Date date = (new GregorianCalendar()).getTime();
				 * SimpleDateFormat formatofecha = new SimpleDateFormat(
				 * "dd-MM-yyyy"); SimpleDateFormat formatohora = new
				 * SimpleDateFormat("HH:mm:ss"); // SimpleDateFormat format =
				 * new // SimpleDateFormat("dd-MM-yyyy\nHH:mm:ss");
				 * 
				 * // "yyyy-MM-dd\nHH:mm:ss"); //
				 * jTextPane1.setText(format.format(date));
				 * MuestraHora.setText("Fecha: " + formatofecha.format(date) +
				 * "\n" + "Hora: " + formatohora.format(date));//
				 */
				
				if (Controlador.DesconeccionArduino == true)
					//si se desconecto algun Arduino
					//y no se pudo reestablecer la coneccion
					//en un tiempo X
					
				{
					//Mostrar mensaje de ERROR
					
					/**
					 * TODO terminar
					 */
					
					//Deshabilito la pantalla.
					NuevaVentana.this.setAlwaysOnTop(false);
					NuevaVentana.this.setFocusable(false);
					NuevaVentana.this.setEnabled(false);
					//NuevaVentana.this.
					Controlador.DetenerTimer();

					JOptionPane.showMessageDialog(null,
						    "ERROR - CONTROLADORES DESCONECTADOS.",
						    "ERROR",
						    JOptionPane.ERROR_MESSAGE);
					
					
				}
				
				// repinto el fondo varias veces cada vez que se presiona un
				// boton
				// asi puedo dejarlos bien transparentes y no se consume
				// mucho poder de procesamiento.
			
				/**
				 * TODO para prueba!
				 */
				
				try
				{
					Thread.sleep(50);
				} catch (InterruptedException e1)
				{
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				
				//*/
				if (repintar == true)
				{
					background.repaint();
					++Primeravez;
					if (Primeravez == 5)
					{
						repintar = false;
						Primeravez = 0;
					}
				}
				//*/
				int filas = 0;
				int columnas = 0;

				// muestra los datos.
				if (Controlador.DatosAMostrar == true) // Llegaron datos y
				// tienen que ser
				// mostrados
				{
					int[] PisosMostrar = new int[205]; // Pisos
					PisosMostrar = Controlador.getterPisos();
					int mostrar = 0;
					// String CadenaMostrar = "";
					// Texto2.setText(CadenaMostrar);
					// int puntero=0;
					/**El codigo a continuancion decodifica el piso en donde
					 * se encuentra el ascensor y lo convierte en el nro
					 * a presentar.
					 */
					int valordelpiso = 0;
					int Estado = 0;
					for (int u = 0; u < 8; ++u)
					{
						//if ((Controlador.UbicacionAscensor & (1L << u)) == 0)
						if ((Controlador.UbicacionAscensor & (1L << u)) ==  Controlador.ValorComparacion) // aca mediante arc. Conf. puedo elegir 1 o 0
						// analizo la parte correspondiente a la posicion
						// del ascensor usando potencias de 2
						{
							int potencia = 1;
							for (int i = 0; i < u; i++)
							{
								potencia *= 2;
							}
							valordelpiso = valordelpiso + potencia;
						}
					}
					// System.out.println(Controlador.UbicacionAscensor);
					PPiso.setText(Integer.toString(valordelpiso));
					
					//if ((Controlador.DireccionAscensor & (1L << 6)) == 0)		//comparo con el bit 7 --- Bajar
					if ((Controlador.DireccionAscensor & (1L << 6)) == Controlador.ValorComparacion)		//comparo con el bit 7 --- Bajar
					{
						//comparo con 0 por ser en bajo nivel 
						//si necesito invertir el nivel tengo que cambiar por 1
						
						System.out.println("Bajando");
						Estado = 1; //bajando
						//jTFlecha.setText("⇓");
					}
					//if ((Controlador.DireccionAscensor & (1L << 7)) == 0)		//comparo con el bit 8 --- Subir 
					if ((Controlador.DireccionAscensor & (1L << 7)) == Controlador.ValorComparacion)		//comparo con el bit 8 --- Subir 
					{
						//jTFlecha.setText("⇑");
						System.out.println("Subiendo");
						Estado = 2; //Subiendo
					}
					// ∆ ∇ ⋀ ⋁ ⍋ ⍒ ⍌ ⍓ ⍗ ⍐ ▼ ▲ ◭ ◮ ⥣ ⥥ ⬘ ⬙    
					if (Estado == 1) jTFlecha.setText("⥥"); //▼ ⇓ ∇ ᗐ ⟱   ︾   ⇊ ⇩ ↧ ↡
					else if (Estado == 2) jTFlecha.setText("⥣"); //▲ ⇑ ∆ ᗑ ⟰   ︽   ⇈ ⇧ ↥ ↟
					else jTFlecha.setText(" ");
					
					// PPiso.setText(Integer.toString((Controlador.UbicacionAscensor)));
					/**
					 * elimino elementos repetidos del vector
					 */
					for(int i=0;i<200;++i)
					{
						for(int j=i+1;j<200;++j)
						{
							if (PisosMostrar[i] == PisosMostrar[j]) PisosMostrar[j]=0;
						}
					}
					
					//while (true)
					/**
					 * Se encarga de mostrar el piso seleccionado.
					 */
					while (mostrar < 200)
					{
						 
						if (PisosMostrar[mostrar] != 0) //si no es un valor vacio
						{
							//Mostrar los pisos de acuerdo si tienen acceso directo o no!
							
							if (PisosMostrar[mostrar] == Controlador.SalidaBotonpisodirecto1) jTable1Model.setValueAt(Controlador.LabelCortopisodirecto1,filas, columnas); 
							else if (PisosMostrar[mostrar] == Controlador.SalidaBotonpisodirecto2) jTable1Model.setValueAt(Controlador.LabelCortopisodirecto2,filas, columnas);
							else if (PisosMostrar[mostrar] == Controlador.SalidaBotonpisodirecto3) jTable1Model.setValueAt(Controlador.LabelCortopisodirecto3,filas, columnas);
							else if (PisosMostrar[mostrar] == Controlador.SalidaBotonpisodirecto4) jTable1Model.setValueAt(Controlador.LabelCortopisodirecto4,filas, columnas);
							else if (PisosMostrar[mostrar] == Controlador.SalidaBotonpisodirecto5) jTable1Model.setValueAt(Controlador.LabelCortopisodirecto5,filas, columnas);
							else if (PisosMostrar[mostrar] == Controlador.SalidaBotonpisodirecto6) jTable1Model.setValueAt(Controlador.LabelCortopisodirecto6,filas, columnas);
							else if (PisosMostrar[mostrar] == Controlador.SalidaBotonpisodirecto7) jTable1Model.setValueAt(Controlador.LabelCortopisodirecto7,filas, columnas);
							else jTable1Model.setValueAt(PisosMostrar[mostrar],filas, columnas);
							//*/
							/*
							switch (PisosMostrar[mostrar])
							{
							case piso1:
								jTable1Model.setValueAt(Controlador.LabelCortopisodirecto1,filas, columnas); 
							break;
							default :
								jTable1Model.setValueAt(PisosMostrar[mostrar],filas, columnas);
							break;
							}//*/
							//jTable1Model.setValueAt(PisosMostrar[mostrar],filas, columnas);//*/
							++columnas;
						}

						if (columnas == 2)
						{
							columnas = 0;
							++filas;
						}
						++mostrar;
						//if (mostrar == 200) break;
					}

					if (filasviejas >= filas)
					{

						// System.out.println(filasviejas);
						// System.out.println(jTable1.getRowCount());
						// se encarga de borrar las demas posiciones del jtable
						if (columnas == 2)
						{
							// jTable1Model.setValueAt("", filasviejas, );
							columnas = 0;
							++filas;
						}//
							// --filas;
						while (filas < jTable1.getRowCount())
						{
							jTable1Model.setValueAt(" ", filas, columnas);
							++columnas;

							if (columnas == 2)
							{
								columnas = 0;
								++filas;
							}
						}
					}// */
					filasviejas = filas;
					Controlador.DatosAMostrar = false;
					Controlador.ResetVariables();
					
					
				}

			}
		};

		ActualizarTexto = new Timer(100, AccionActualiza);  //actualiza en vector de salida cada 100 ms

	}

	
	//------------------------------------------------------------------------------------------------------------------------------
	/*
	public BufferedImage ImagenCompatible(BufferedImage image)
	{
		// obtain the current system graphical settings
		GraphicsConfiguration gfx_config = GraphicsEnvironment.
			getLocalGraphicsEnvironment().getDefaultScreenDevice().
			getDefaultConfiguration();

		
		//if image is already compatible and optimized for current system 
		//settings, simply return it
		 
		if (image.getColorModel().equals(gfx_config.getColorModel()))
			return image;

		// image is not optimized, so create a new image that is
		BufferedImage new_image = gfx_config.createCompatibleImage(
				image.getWidth(), image.getHeight(), image.getTransparency());

		// get the graphics context of the new image to draw the old image on
		Graphics2D g2d = (Graphics2D) new_image.getGraphics();

		// actually draw the image and dispose of context no longer needed
		g2d.drawImage(image, 0, 0, null);
		g2d.dispose();

		// return the new optimized image
		return new_image; 
	}//*/
//-------------------------------------------------------------------------------------------------------------------------------------------------------
	public void EnviarDatoBotonPreseleccion (int SalidaPreseleccionada)
	{
		Controlador.DetenerTimer(); 
		Controlador.EnviarDato(SalidaPreseleccionada);
		repintar = true;
	}
	
	

}
